package pos.domain;

import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;
import pos.client.dac.dao.PianoDAOAsync;

public class Piano implements Serializable{

    private String nome;
    private int id_piano;
    private TipoLinkU_P utente;
    private HashSet<TipoLinkcomposto_da> insieme_corsi;
    //private HashSet<TipoLinkP_AP> insieme_FaParte;

    public Piano() {
    }

    public Piano(String nome) {
        this.nome = nome;
        insieme_corsi = new HashSet<TipoLinkcomposto_da>();
//	 insieme_FaParte=new HashSet<TipoLinkP_AP>();

    }

    //gestione delle associazioni
    //---"Crea"
    public int quantiUtenti() {
        if (utente == null) {
            return 0;
        } else {
            return 1;
        }
    }

    public void inserisciLinkCrea(TipoLinkU_P t) {
        if (t != null && t.getPiano() == this) {
            ManagerCrea.inserisci(t);
        }
    }

    public void eliminaLinkCrea(TipoLinkU_P t) {
        if (t != null && t.getPiano() == this) {
            ManagerCrea.elimina(t);
        }
    }

    public TipoLinkU_P getLinkCrea() throws EccezioneCardMinMax {
        if (utente == null) {
            throw new EccezioneCardMinMax("Cardinalita� minima violata");
        } else {
            return utente;
        }
    }

    public void inserisciPerManagerCrea(ManagerCrea a) {
        if (a != null) {
            utente = a.getLink();
        }
    }

    public void eliminaPerManagerCrea(ManagerCrea a) {
        if (a != null) {
            utente = null;
        }

    }

    //---"Composto_da"
    public Set<TipoLinkcomposto_da> getCorsi() {
        return (HashSet<TipoLinkcomposto_da>) insieme_corsi.clone();
    }

    public void inserisciCorso(TipoLinkcomposto_da c) {
        if (c != null) {
            insieme_corsi.add(c);
        }
    }

    public void eliminaCorso(TipoLinkcomposto_da c) {
        if (c != null) {
            insieme_corsi.remove(c);
        }
    }
    /*
     * //---"fa_parte"
     *
     * public Set<TipoLinkP_AP> getInsiemeFaParte(){ return
     * (HashSet<TipoLinkP_AP>)insieme_FaParte.clone(); }
     *
     * public void inserisciLinkFaParte(TipoLinkP_AP link){
     * if(link!=null&&link.getPiano()==this){ ManagerFaParte.inserisci(link); }
     * }
     *
     * public void eliminaLinkFaParte(TipoLinkP_AP link){
     * if(link!=null&&link.getPiano()==this){ ManagerFaParte.elimina(link); } }
     *
     * public void inserisciPerManagerFaParte(ManagerFaParte m){
     * if(m!=null)insieme_FaParte.add(m.getLink()); }
     *
     * public void eliminaPerManagerFaParte(ManagerFaParte m){
     * if(m!=null)insieme_FaParte.remove(m.getLink()); }
     */

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Piano other = (Piano) obj;
        if (this.id_piano != other.id_piano) {
            return false;
        }
        return true;
    }

    @Override
    public int hashCode() {
        int hash = 7;
        hash = 17 * hash + this.id_piano;
        return hash;
    }
       
    // funzioni Set&Get
    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public int getId_piano() {
        return id_piano;
    }

    public void setId_piano(int id) {
        id_piano = id;
    }

//funzioni supplementari
    @Override
    public String toString() {
        return nome;
    }
}
